package classes;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import interfaces.Atacante;
import interfaces.Posicionable;
import interfaces.Defensor;

public class Usuario {
	//Entrega2, aqui se establecen los campos a persistir.
	private String nombre,apellido,alias,password;
	private Date fechaAlta, fechaModificacion;
	//Entrega1#1 Aqui se expresan los dos conjuntos de edificios y unidades
	private List<Posicionable> edificios, unidades;
	private Integer id;

	private boolean conectado;
	
	public Usuario() {	
	}
	
	public Usuario(String nom, String apellido, String alias,String password, Date fea, Date fem){
		this.setAlias(alias);
		this.setNombre(nom);
		this.setPassword(password);
		this.setFechaAlta(fea);
		this.setFechaModificacion(fem);
		this.setApellido(apellido);
		this.setEdificios(new ArrayList<Posicionable>());
		this.setUnidades(new ArrayList<Posicionable>());
	}
	
	public void addEdificio(Posicionable edificio) {
		this.getEdificios().add(edificio);
	}
	
	public void addUnidad(Posicionable unidad) {
		this.getUnidades().add(unidad);
	}

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public String getAlias() {
		return alias;
	}

	public void setAlias(String alias) {
		this.alias = alias;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Date getFechaAlta() {
		return fechaAlta;
	}

	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}

	public Date getFechaModificacion() {
		return fechaModificacion;
	}

	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	public List<Posicionable> getEdificios() {
		return edificios;
	}

	public void setEdificios(List<Posicionable> edificios) {
		this.edificios = edificios;
	}

	public List<Posicionable> getUnidades() {
		return unidades;
	}

	public void setUnidades(List<Posicionable> unidades) {
		this.unidades = unidades;
	}

	public boolean isConectado() {
		return conectado;
	}

	public void setConectado(boolean conectado) {
		this.conectado = conectado;
	}
	
	public Boolean ocupa(Posicionable a, Posicionable b){
		return a.ocupa(b.getPosition());
	}
	
	public void atacar(Atacante a, Defensor d){
		a.atacarA(d);
	}

	public boolean chequearPassword(String password2) {
		return this.getPassword().equals(password2);
	}
	
	public void removeBuilding(int id){
		for(Posicionable p: this.getEdificios()){
			if(p.getId() == id) {
				this.getEdificios().remove(p);
				break;
			}
		}
	}
	
	public void removeUnit(int id){
		for(Posicionable p: this.getUnidades()){
			if(p.getId() == id) {
				this.getUnidades().remove(p);
				break;
			}
		}
	}
	
}
